/****************************************************************************
 *
 *   Copyright (c) 2020 Estimation and Control Library (ECL). All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name ECL nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ****************************************************************************/

#include <stdint.h>

static constexpr float SAMPLING_RES = 10;
static constexpr float SAMPLING_MIN_LAT = -90;
static constexpr float SAMPLING_MAX_LAT = 90;
static constexpr float SAMPLING_MIN_LON = -180;
static constexpr float SAMPLING_MAX_LON = 180;

static constexpr int LAT_DIM = 19;
static constexpr int LON_DIM = 37;


// Magnetic declination data in radians * 10^-4
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2020.6366,
static constexpr const int16_t declination_table[19][37] {
//    LONGITUDE:   -180,  -170,  -160,  -150,  -140,  -130,  -120,  -110,  -100,   -90,   -80,   -70,   -60,   -50,   -40,   -30,   -20,   -10,     0,    10,    20,    30,    40,    50,    60,    70,    80,    90,   100,   110,   120,   130,   140,   150,   160,   170,   180,
/* LAT: -90 */ {  26035, 24289, 22544, 20799, 19053, 17308, 15563, 13817, 12072, 10327,  8582,  6836,  5091,  3346,  1600,  -145, -1890, -3635, -5381, -7126, -8871,-10617,-12362,-14107,-15853,-17598,-19343,-21089,-22834,-24579,-26325,-28070,-29816, 31271, 29526, 27780, 26035, },
/* LAT: -80 */ {  22607, 20468, 18523, 16745, 15101, 13561, 12095, 10683,  9306,  7955,  6623,  5303,  3994,  2689,  1382,    64, -1275, -2644, -4050, -5498, -6988, -8521,-10094,-11710,-13371,-15086,-16868,-18736,-20715,-22830,-25101,-27534,-30103, 30085, 27460, 24945, 22607, },
/* LAT: -70 */ {  14961, 13566, 12446, 11490, 10628,  9801,  8963,  8079,  7129,  6111,  5041,  3947,  2859,  1800,   775,  -235, -1270, -2369, -3561, -4852, -6224, -7646, -9089,-10527,-11950,-13363,-14788,-16268,-17881,-19777,-22266,-26020, 30896, 24224, 19631, 16835, 14961, },
/* LAT: -60 */ {   8357,  8125,  7856,  7594,  7351,  7106,  6806,  6381,  5772,  4958,  3961,  2849,  1725,   687,  -206,  -973, -1703, -2517, -3505, -4683, -5998, -7357, -8672, -9882,-10949,-11852,-12572,-13069,-13240,-12791,-10711, -3660,  4698,  7522,  8330,  8477,  8357, },
/* LAT: -50 */ {   5436,  5478,  5431,  5351,  5286,  5257,  5229,  5109,  4774,  4121,  3119,  1851,   506,  -690, -1584, -2171, -2579, -3013, -3673, -4653, -5869, -7131, -8270, -9180, -9791,-10048, -9873, -9133, -7641, -5292, -2396,   349,  2456,  3879,  4753,  5229,  5436, },
/* LAT: -40 */ {   3919,  4014,  4029,  3994,  3942,  3915,  3925,  3920,  3754,  3231,  2224,   792,  -775, -2110, -3003, -3482, -3688, -3758, -3909, -4428, -5358, -6416, -7307, -7865, -7998, -7649, -6784, -5411, -3694, -1980,  -511,   713,  1753,  2611,  3261,  3688,  3919, },
/* LAT: -30 */ {   2953,  3041,  3080,  3076,  3026,  2954,  2900,  2870,  2748,  2283,  1270,  -233, -1844, -3122, -3893, -4264, -4369, -4189, -3761, -3491, -3789, -4510, -5219, -5596, -5501, -4941, -3997, -2787, -1561,  -600,    87,   689,  1308,  1901,  2402,  2757,  2953, },
/* LAT: -20 */ {   2311,  2359,  2386,  2400,  2368,  2281,  2181,  2109,  1966,  1483,   451, -1021, -2506, -3595, -4162, -4309, -4134, -3606, -2756, -1927, -1596, -1912, -2558, -3048, -3109, -2770, -2144, -1322,  -528,   -24,   249,   554,   988,  1454,  1865,  2163,  2311, },
/* LAT: -10 */ {   1917,  1913,  1903,  1912,  1894,  1819,  1719,  1634,  1452,   912,  -130, -1496, -2781, -3641, -3948, -3755, -3201, -2432, -1584,  -813,  -321,  -321,  -772, -1285, -1515, -1439, -1131,  -627,  -117,   138,   198,   363,   726,  1148,  1528,  1804,  1917, },
/* LAT:   0 */ {   1705,  1674,  1629,  1631,  1630,  1571,  1479,  1375,  1124,   510,  -518, -1742, -2813, -3432, -3470, -3000, -2243, -1458,  -797,  -252,   172,   305,    46,  -371,  -636,  -698,  -600,  -334,   -34,    67,    18,   112,   444,   870,  1275,  1583,  1705, },
/* LAT:  10 */ {   1574,  1585,  1551,  1577,  1612,  1573,  1465,  1288,   916,   202,  -815, -1896, -2742, -3114, -2942, -2357, -1584,  -865,  -338,    49,   379,   541,   395,    74,  -167,  -276,  -294,  -207,   -95,  -127,  -256,  -225,    68,   507,   974,  1371,  1574, },
/* LAT:  20 */ {   1402,  1552,  1619,  1717,  1810,  1799,  1656,  1364,   823,   -33, -1079, -2042, -2662, -2799, -2494, -1904, -1195,  -539,   -68,   249,   512,   666,   586,   345,   141,    24,   -58,  -113,  -185,  -367,  -597,  -654,  -428,     7,   538,  1049,  1402, },
/* LAT:  30 */ {   1117,  1485,  1747,  1974,  2138,  2154,  1975,  1560,   836,  -196, -1324, -2220, -2660, -2618, -2233, -1660, -1006,  -383,    89,   402,   638,   792,   781,   635,   482,   360,   214,    16,  -256,  -624,  -991, -1153, -1000,  -583,   -12,   596,  1117, },
/* LAT:  40 */ {    778,  1366,  1860,  2252,  2501,  2547,  2335,  1806,   895,  -341, -1598, -2489, -2832, -2694, -2255, -1666, -1012,  -379,   139,   511,   787,   994,  1097,  1091,  1014,   869,   613,   220,  -305,  -907, -1430, -1681, -1573, -1162,  -563,   114,   778, },
/* LAT:  50 */ {    509,  1260,  1939,  2492,  2855,  2959,  2728,  2072,   922,  -594, -2044, -2984, -3294, -3110, -2622, -1977, -1266,  -564,    59,   572,   998,  1361,  1650,  1828,  1852,  1675,  1247,   561,  -318, -1219, -1908, -2207, -2090, -1649, -1007,  -264,   509, },
/* LAT:  60 */ {    345,  1204,  2009,  2698,  3194,  3397,  3172,  2344,   800, -1203, -2957, -3955, -4212, -3949, -3373, -2623, -1792,  -945,  -130,   628,  1326,  1964,  2516,  2922,  3094,  2927,  2315,  1229,  -168, -1494, -2382, -2706, -2545, -2044, -1336,  -518,   345, },
/* LAT:  70 */ {    169,  1115,  2016,  2812,  3418,  3698,  3417,  2221,  -129, -2948, -4929, -5737, -5722, -5217, -4430, -3481, -2445, -1370,  -287,   781,  1813,  2785,  3661,  4378,  4841,  4896,  4325,  2904,   752, -1355, -2674, -3131, -2972, -2429, -1662,  -774,   169, },
/* LAT:  80 */ {   -340,   591,  1453,  2151,  2531,  2304,   945, -2033, -5559, -7686, -8336, -8115, -7421, -6457, -5332, -4108, -2822, -1502,  -166,  1170,  2491,  3777,  5007,  6147,  7144,  7905,  8257,  7850,  6057,  2548,  -917, -2666, -3079, -2779, -2115, -1267,  -340, },
/* LAT:  90 */ { -30548,-28803,-27057,-25312,-23566,-21821,-20076,-18330,-16585,-14840,-13094,-11349, -9604, -7859, -6114, -4368, -2623,  -878,   867,  2612,  4358,  6103,  7848,  9593, 11339, 13084, 14829, 16575, 18320, 20065, 21811, 23556, 25302, 27047, 28793, 30538,-30548, },
};

// Magnetic inclination data in radians * 10^-4
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2020.6366,
static constexpr const int16_t inclination_table[19][37] {
//    LONGITUDE:   -180,  -170,  -160,  -150,  -140,  -130,  -120,  -110,  -100,   -90,   -80,   -70,   -60,   -50,   -40,   -30,   -20,   -10,     0,    10,    20,    30,    40,    50,    60,    70,    80,    90,   100,   110,   120,   130,   140,   150,   160,   170,   180,
/* LAT: -90 */ { -12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583,-12583, },
/* LAT: -80 */ { -13671,-13538,-13378,-13197,-13003,-12801,-12596,-12395,-12203,-12026,-11869,-11734,-11623,-11537,-11473,-11432,-11413,-11416,-11443,-11497,-11580,-11694,-11838,-12011,-12208,-12425,-12653,-12886,-13114,-13327,-13515,-13666,-13771,-13824,-13822,-13769,-13671, },
/* LAT: -70 */ { -14123,-13804,-13485,-13161,-12829,-12483,-12127,-11768,-11423,-11112,-10857,-10671,-10556,-10503,-10490,-10496,-10506,-10519,-10545,-10601,-10708,-10880,-11123,-11435,-11805,-12220,-12667,-13130,-13596,-14049,-14469,-14818,-15013,-14964,-14735,-14438,-14123, },
/* LAT: -60 */ { -13528,-13177,-12839,-12507,-12164,-11791,-11375,-10919,-10449,-10015, -9679, -9497, -9488, -9621, -9827,-10026,-10160,-10214,-10209,-10198,-10243,-10396,-10677,-11078,-11571,-12123,-12707,-13303,-13891,-14453,-14949,-15241,-15074,-14694,-14291,-13900,-13528, },
/* LAT: -50 */ { -12500,-12160,-11831,-11510,-11187,-10840,-10440, -9968, -9435, -8909, -8510, -8371, -8560, -9013, -9579,-10100,-10475,-10656,-10644,-10503,-10361,-10356,-10562,-10964,-11498,-12087,-12674,-13216,-13665,-13966,-14076,-14005,-13802,-13520,-13193,-12847,-12500, },
/* LAT: -40 */ { -11240,-10896,-10552,-10209, -9869, -9530, -9167, -8739, -8216, -7646, -7207, -7144, -7582, -8394, -9318,-10157,-10831,-11286,-11453,-11310,-10978,-10696,-10668,-10931,-11383,-11887,-12338,-12668,-12834,-12840,-12749,-12610,-12428,-12196,-11910,-11584,-11240, },
/* LAT: -30 */ {  -9600, -9230, -8857, -8469, -8076, -7698, -7337, -6942, -6426, -5811, -5344, -5394, -6129, -7315, -8569, -9677,-10605,-11336,-11765,-11788,-11438,-10932,-10581,-10562,-10802,-11123,-11387,-11510,-11454,-11278,-11099,-10958,-10807,-10597,-10316, -9973, -9600, },
/* LAT: -20 */ {  -7368, -6941, -6534, -6110, -5665, -5232, -4835, -4414, -3842, -3152, -2683, -2901, -3966, -5556, -7191, -8581, -9671,-10471,-10938,-11004,-10665,-10063, -9498, -9238, -9275, -9436, -9583, -9609, -9442, -9168, -8967, -8869, -8754, -8540, -8224, -7816, -7368, },
/* LAT: -10 */ {  -4409, -3893, -3454, -3023, -2566, -2113, -1692, -1225,  -587,   127,   515,   135, -1145, -3037, -5020, -6662, -7795, -8459, -8749, -8710, -8325, -7658, -6993, -6634, -6586, -6678, -6800, -6830, -6646, -6348, -6183, -6174, -6116, -5891, -5507, -4987, -4409, },
/* LAT:   0 */ {   -899,  -298,   150,   545,   962,  1380,  1778,  2237,  2839,  3432,  3659,  3204,  1953,    71, -1979, -3667, -4718, -5180, -5260, -5107, -4688, -3991, -3286, -2904, -2839, -2912, -3042, -3119, -2990, -2751, -2684, -2803, -2842, -2645, -2221, -1601,  -899, },
/* LAT:  10 */ {   2569,  3173,  3593,  3927,  4280,  4648,  5008,  5411,  5880,  6265,  6322,  5863,  4814,  3272,  1578,   174,  -669,  -947,  -875,  -651,  -256,   367,   999,  1344,  1405,  1353,  1248,  1156,  1201,  1310,  1247,  1005,   836,   920,  1271,  1863,  2569, },
/* LAT:  20 */ {   5420,  5934,  6304,  6594,  6906,  7251,  7600,  7960,  8308,  8521,  8449,  8006,  7191,  6108,  4979,  4052,  3498,  3355,  3490,  3724,  4045,  4501,  4959,  5217,  5270,  5244,  5192,  5136,  5129,  5117,  4954,  4640,  4359,  4277,  4448,  4863,  5420, },
/* LAT:  30 */ {   7570,  7936,  8249,  8529,  8837,  9186,  9549,  9899, 10186, 10310, 10177,  9767,  9148,  8439,  7774,  7252,  6946,  6889,  7020,  7225,  7465,  7758,  8045,  8219,  8273,  8279,  8277,  8268,  8250,  8175,  7962,  7620,  7274,  7059,  7042,  7232,  7570, },
/* LAT:  40 */ {   9265,  9485,  9739, 10024, 10352, 10715, 11087, 11432, 11692, 11782, 11640, 11285, 10814, 10339,  9938,  9648,  9490,  9477,  9580,  9735,  9906, 10086, 10256, 10381, 10457, 10513, 10564, 10597, 10584, 10481, 10246,  9902,  9540,  9257,  9114,  9125,  9265, },
/* LAT:  50 */ {  10801, 10923, 11126, 11397, 11722, 12079, 12437, 12758, 12985, 13049, 12913, 12616, 12250, 11901, 11622, 11431, 11332, 11322, 11383, 11482, 11592, 11705, 11819, 11934, 12051, 12170, 12281, 12354, 12349, 12231, 11990, 11666, 11328, 11043, 10853, 10773, 10801, },
/* LAT:  60 */ {  12317, 12393, 12547, 12768, 13042, 13345, 13651, 13920, 14098, 14127, 13990, 13739, 13447, 13173, 12950, 12790, 12696, 12660, 12672, 12717, 12782, 12865, 12968, 13098, 13255, 13429, 13593, 13705, 13716, 13602, 13381, 13103, 12823, 12585, 12415, 12324, 12317, },
/* LAT:  70 */ {  13759, 13805, 13904, 14050, 14234, 14441, 14652, 14835, 14939, 14915, 14772, 14567, 14346, 14140, 13965, 13829, 13733, 13676, 13655, 13666, 13706, 13776, 13877, 14011, 14176, 14362, 14546, 14689, 14740, 14673, 14514, 14316, 14120, 13955, 13836, 13769, 13759, },
/* LAT:  80 */ {  15005, 15020, 15061, 15124, 15204, 15292, 15374, 15418, 15393, 15306, 15188, 15060, 14935, 14820, 14719, 14636, 14574, 14532, 14513, 14516, 14541, 14590, 14660, 14752, 14862, 14988, 15122, 15253, 15360, 15407, 15374, 15291, 15199, 15117, 15054, 15016, 15005, },
/* LAT:  90 */ {  15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15388, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, 15389, },
};

// Magnetic strength data in milli-Gauss * 10
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2020.6366,
static constexpr const int16_t strength_table[19][37] {
//    LONGITUDE:  -180, -170, -160, -150, -140, -130, -120, -110, -100,  -90,  -80,  -70,  -60,  -50,  -40,  -30,  -20,  -10,    0,   10,   20,   30,   40,   50,   60,   70,   80,   90,  100,  110,  120,  130,  140,  150,  160,  170,  180,
/* LAT: -90 */ {  5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5462, 5462, 5462, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, },
/* LAT: -80 */ {  6069, 6006, 5929, 5838, 5735, 5624, 5507, 5385, 5263, 5143, 5029, 4923, 4829, 4749, 4685, 4640, 4614, 4611, 4632, 4677, 4747, 4839, 4953, 5084, 5227, 5376, 5526, 5669, 5800, 5914, 6007, 6077, 6121, 6142, 6139, 6114, 6069, },
/* LAT: -70 */ {  6313, 6182, 6034, 5871, 5694, 5502, 5298, 5083, 4863, 4648, 4444, 4261, 4102, 3970, 3866, 3788, 3740, 3727, 3754, 3828, 3954, 4132, 4358, 4624, 4918, 5224, 5528, 5812, 6062, 6267, 6419, 6515, 6558, 6553, 6505, 6423, 6313, },
/* LAT: -60 */ {  6197, 6008, 5809, 5602, 5385, 5151, 4895, 4617, 4324, 4034, 3765, 3536, 3355, 3219, 3120, 3046, 2996, 2975, 3000, 3087, 3253, 3500, 3823, 4206, 4627, 5060, 5482, 5866, 6192, 6442, 6608, 6688, 6692, 6631, 6520, 6371, 6197, },
/* LAT: -50 */ {  5853, 5625, 5395, 5167, 4936, 4692, 4422, 4119, 3791, 3458, 3154, 2912, 2748, 2655, 2606, 2573, 2541, 2516, 2521, 2590, 2758, 3042, 3432, 3899, 4404, 4910, 5386, 5807, 6147, 6391, 6531, 6574, 6534, 6426, 6266, 6070, 5853, },
/* LAT: -40 */ {  5399, 5156, 4913, 4675, 4442, 4206, 3952, 3669, 3355, 3029, 2728, 2503, 2383, 2355, 2374, 2398, 2405, 2396, 2385, 2412, 2535, 2800, 3209, 3718, 4263, 4789, 5259, 5650, 5945, 6134, 6224, 6229, 6161, 6032, 5853, 5636, 5399, },
/* LAT: -30 */ {  4882, 4644, 4407, 4174, 3949, 3731, 3513, 3282, 3027, 2752, 2493, 2308, 2234, 2256, 2323, 2395, 2463, 2517, 2544, 2557, 2618, 2805, 3156, 3636, 4166, 4665, 5089, 5411, 5617, 5718, 5746, 5720, 5641, 5510, 5332, 5117, 4882, },
/* LAT: -20 */ {  4323, 4113, 3907, 3704, 3508, 3326, 3158, 2995, 2819, 2622, 2431, 2295, 2248, 2287, 2374, 2485, 2615, 2746, 2841, 2881, 2904, 2991, 3219, 3594, 4040, 4469, 4823, 5064, 5173, 5182, 5152, 5105, 5023, 4896, 4730, 4534, 4323, },
/* LAT: -10 */ {  3791, 3633, 3482, 3337, 3202, 3082, 2979, 2889, 2794, 2682, 2560, 2459, 2408, 2426, 2507, 2634, 2791, 2952, 3082, 3149, 3165, 3187, 3301, 3545, 3866, 4188, 4457, 4625, 4665, 4614, 4546, 4482, 4392, 4267, 4119, 3957, 3791, },
/* LAT:   0 */ {  3413, 3322, 3239, 3168, 3113, 3075, 3051, 3035, 3014, 2968, 2890, 2794, 2710, 2672, 2707, 2806, 2939, 3076, 3194, 3272, 3305, 3326, 3395, 3546, 3751, 3964, 4145, 4255, 4265, 4199, 4111, 4018, 3905, 3774, 3641, 3518, 3413, },
/* LAT:  10 */ {  3283, 3254, 3235, 3233, 3258, 3307, 3365, 3421, 3460, 3452, 3384, 3269, 3139, 3039, 3006, 3042, 3121, 3219, 3320, 3406, 3471, 3532, 3617, 3732, 3864, 4000, 4120, 4193, 4198, 4138, 4030, 3887, 3726, 3567, 3433, 3338, 3283, },
/* LAT:  20 */ {  3400, 3405, 3434, 3490, 3584, 3707, 3838, 3958, 4042, 4056, 3983, 3840, 3670, 3526, 3444, 3427, 3459, 3529, 3624, 3721, 3810, 3907, 4017, 4127, 4233, 4342, 4443, 4510, 4523, 4468, 4333, 4133, 3907, 3698, 3536, 3437, 3400, },
/* LAT:  30 */ {  3724, 3734, 3792, 3894, 4040, 4213, 4391, 4549, 4659, 4687, 4614, 4457, 4265, 4095, 3984, 3934, 3933, 3981, 4065, 4162, 4257, 4361, 4477, 4594, 4712, 4837, 4955, 5042, 5071, 5017, 4864, 4626, 4353, 4100, 3902, 3775, 3724, },
/* LAT:  40 */ {  4223, 4226, 4295, 4422, 4592, 4782, 4967, 5124, 5230, 5255, 5186, 5036, 4845, 4666, 4533, 4454, 4424, 4443, 4500, 4577, 4662, 4757, 4871, 5005, 5155, 5315, 5465, 5576, 5619, 5568, 5415, 5179, 4905, 4646, 4436, 4293, 4223, },
/* LAT:  50 */ {  4831, 4830, 4891, 5005, 5155, 5316, 5466, 5586, 5659, 5667, 5602, 5472, 5307, 5139, 4999, 4898, 4840, 4825, 4847, 4896, 4963, 5052, 5170, 5320, 5494, 5678, 5845, 5965, 6013, 5973, 5844, 5648, 5422, 5204, 5024, 4897, 4831, },
/* LAT:  60 */ {  5391, 5385, 5419, 5486, 5574, 5669, 5756, 5820, 5851, 5840, 5783, 5687, 5564, 5433, 5312, 5214, 5145, 5109, 5105, 5132, 5186, 5271, 5388, 5534, 5701, 5870, 6019, 6125, 6173, 6152, 6070, 5943, 5795, 5651, 5528, 5440, 5391, },
/* LAT:  70 */ {  5726, 5710, 5711, 5726, 5750, 5777, 5800, 5813, 5810, 5789, 5747, 5688, 5615, 5538, 5462, 5397, 5347, 5318, 5312, 5331, 5375, 5444, 5535, 5643, 5761, 5876, 5976, 6051, 6091, 6096, 6067, 6013, 5945, 5874, 5810, 5760, 5726, },
/* LAT:  80 */ {  5788, 5772, 5759, 5748, 5739, 5730, 5720, 5708, 5692, 5672, 5649, 5623, 5594, 5566, 5540, 5519, 5504, 5499, 5503, 5517, 5543, 5577, 5620, 5668, 5718, 5766, 5809, 5844, 5869, 5882, 5885, 5879, 5865, 5847, 5827, 5807, 5788, },
/* LAT:  90 */ {  5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, },
};
